/**
 * 文件名：@MessageUtil.java <br/>
 * 包名：cn.efunbox.afw.core.util <br/>
 * 项目名：afw-core <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.core.util;

import java.util.Locale;

import org.springframework.context.MessageSource;

/**
 * 类名：MessageUtil  <br />
 *
 * 功能：国际化使用的工具
 *
 * @author xtwin <br />
 * 创建时间：2015年12月3日 下午6:06:34  <br />
 * @version 2015年12月3日
 */
public class MessageUtil {
	
	// 消息源
	private static MessageSource messageSource;

	/**
	 * 功能：使用指定的locale解析指定的code，默认返回null <br/>
	 *
	 * @author xtwin <br/>
	 * @version 2013-11-14 下午06:54:07 <br/>
	 */
	public static final String getMessage(String code, Locale locale) {
		return getMessage(code, null, locale);
	}
	
	/**
	 * 功能：使用指定的locale和参数解析指定的code，默认返回null <br/>
	 *
	 * @author xtwin <br/>
	 * @version 2013-12-17 下午04:49:40 <br/>
	 */
	public static final String getMessage(String code, Object[] args, Locale locale) {
		return getMessage(code, args, locale, null);
	}
	
	/**
	 * 功能：使用指定的locale和参数解析指定的code，若找不到对应的国际化信息，则返回默认值 <br/>
	 *
	 * @author xtwin <br/>
	 * @version 2016年8月19日 下午2:41:36 <br/>
	 */
	public static final String getMessage(String code, Object[] args, Locale locale, String _default) {
		return getMessage(code, args, locale, _default, true);
	}

	/**
	 * 功能：使用指定的locale和参数解析指定的code，若找不到对应的国际化信息，则返回默认值 <br/>
	 *
	 * @author xtwin <br/>
	 * @version 2013-11-14 下午06:53:24 <br/>
	 */
	public static final String getMessage(String code, Object[] args, Locale locale, String _default, boolean parseDefault) {
		String message = null;
		try {
			// 解析消息
			message = messageSource.getMessage(code, args, locale);
		} catch (Exception e) {
			// 使用默认消息
			if (parseDefault && null != _default) {
				// 使用默认参数解析
				message = getMessage(_default, args, locale, null, false);
			} else {
				message = _default;
			}
		}
		
		return message;
	}
	
	/**
	 * 
	 * 功能：获得消息对象 <br/>
	 *
	 * @author xtwin <br/>
	 * @version 2013-11-14 下午06:52:23 <br/>
	 */
	public static void setMessageSource(MessageSource messageSource) {
		// 初始化消息源
		MessageUtil.messageSource = messageSource;
	}
}
